252. k8s中的pod呼叫
WHY
其實如果架構可以,
應該是不需要用到這個功能。
用這個也有前提,必須要是statefulset。
Solution
pod本身的name是隨機的,
所以不太可能用程式寫死去呼叫他,
當然,真的要硬幹還是可以。
statefulSet,他的pod是從0開始往後,
從k8s的文件看,呼叫單個pod的方式,
<podname>.<servicename>.<namespace>.svc.cluster.local
ref. Stable Network ID
但是!!!我在測試時,就莫名其妙一直卡關。
到最後還直接去查kube-dns的值,看是怎麼解析的。
測試的statefulset是rabbitMQ,
從上圖可以組成下面的網址
curl http://qa-rabbitmq-server-1.qa-rabbitmq.rabbitmq-system.svc.cluster.local:15692/metrics
測試時,一直出現錯誤,找不到服務。
但用pod IP可以找到資料。
最後氣到,直接裝了nslookup,反查dns名稱了。
apt-get install dnsutils
or
yum install bind-utils
要查詢之前,最好先找到你的kube-dns 的pod ip,
不過其實預設的dns應該就是kube-dns的ip了
但為了萬一,我還是強制指定一下,如果有多個pod,隨便抓一個就好,
kube-dns的ip 192.168.24.157
利用rabbitMQ的ip 反查domain
結果..ip註冊的domain是
qa-rabbitmq-server-1.qa-rabbitmq-nodes.rabbitmq-system.svc.cluster.local
照格式來講沒錯,但他用的是另一個service name,
為什麼我到現在還是不清楚。